#include<bits/stdc++.h>
#define A 10005
using namespace std;
int T,n,m,L,V,sn,sm;
struct speed{
    int p,fl;
}d[A];
struct car{
    int d,u,a;
}c[A];
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    while(T--){
        cin>>n>>m>>L>>V;
        sm=m;
        for(int i=1;i<=n;i++){
            cin>>c[i].d>>c[i].u>>c[i].a;
        }
        for(int i=1;i<=m;i++){
            cin>>d[i].p;
            d[i].fl=0;
        }
        for(int i=1;i<=n;i++){
            if(c[i].a==0&&c[i].u>V){
               sn++;
               for(int i=1;i<=m;i++){
                    if(d[i].p>c[i].d){
                        d[i].fl=1;
                        break;
                    }
               }
            }
            if(c[i].a>0){
                double t,s;
                bool flag=true;
                t=((V-c[i].u)*1.0)/c[i].a;
                s=c[i].u*t+c[i].a*t*t*0.5;
                for(int i=1;i<=m;i++){
                    if(d[i].p>c[i].d+s){
                        d[i].fl=1;
                        flag=false;
                        break;
                    }
               }
               if(!flag) sn++;
            }
            if(c[i].a<0){
                double t,s;
                bool flag=true;
                t=((c[i].u-V)*1.0)/abs(c[i].a);
                s=c[i].u*t+c[i].a*t*t*0.5;
                for(int i=1;i<=m;i++){
                    if(d[i].p<c[i].d+s&&d[i].p>c[i].d){
                        d[i].fl=1;
                        flag=false;
                        break;
                    }
               }
               if(!flag) sn++;
            }
        }
        for(int i=0;i<=m;i++){
            if(d[i].p==0){
                sm--;
            }
        }
        cout<<sn<<" "<<sm;
        cout<<endl;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
